package com.cskaoyan.javase.io._2char._2conversion;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 字符输入流的抽象父类是java.io.Reader
 * java.io.InputStreamReader类同样是一个转换流，它将一个字节输入流对象转换成对应的字符输入流。
 * 它的IO功能实现仍然依赖于一个字节输入流对象,只不过是扩展了编码集的功能,可以进行解码操作,将字符作为基本的处理数据的单位
 *
 * 注意事项:
 *      1.在做输入流读的操作时,创建输入流对象,都必须要求文件存在,否则就会报错!
 *
 * @since 11:20
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) throws IOException {
        // InputStreamReader(InputStream in)	创建一个使用默认字符集UTF-8的 InputStreamReader。
        InputStreamReader reader = new InputStreamReader(new FileInputStream("a.txt"));
        // int	read()	读取单个字符。该方法的返回值就是读取到的这个字符的编码值，实际上可以认为该方法的返回值类型是char类型。
        char readChar = (char) reader.read();
        System.out.println(readChar);
        // int	read(char[] cbuf)	将字符读入给定的字符数组，返回值是读取到的字符的个数。
        // 这里表示一次性读取10个字符,但具体是多少字节不知道,要看内容以及编码表
        char[] buf = new char[10];
        // 实际读取字符的个数
        int readCount = reader.read(buf);
        System.out.println(readCount);
        // String(char[],int,int) 指定读取到的字符的位置,避免出现错误
        System.out.println(new String(buf, 0, readCount));

        // abstract  int	read(char[] cbuf, int off, int len) 	将字符读入给定的字符数组（且可以指定读取位置），返回值是读取到的字符的个数。

        // 关闭流
        reader.close();
    }
}
